package com.common;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * 随机工具类
 */
public class RandomUtils {
    /**
     * 时间 可以转换成以下3种格式的字符串
     */
    private static final SimpleDateFormat SDF1 = new SimpleDateFormat("yyyy-MM-dd");
    private static final SimpleDateFormat SDF2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    private static final SimpleDateFormat SDF3 = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS");
    private static Random random = new Random();

    /**
     * 获取当前日期转换成的字符串格式
     */
    public static String getCurrentDateForString() {
        return SDF1.format(new Date());
    }


    /**
     * 生成文件名 使用时间+4位随机数
     * @param fileName 文件名称
     */
    public static String createFileNameUseTime(String fileName) {
        // 文件后缀
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
        // yyyyMMddHHmmssSSS 格式的字符串
        String time = SDF2.format(new Date());
        // 4位随机数
        int num = random.nextInt(9000) + 1000;
        return time + num + fileSuffix;
    }

    /**
     * 生成文件名使用时间 + 4位随机数 + 临时后缀
     * @param fileName 文件名称
     * @param suffix   临时文件后缀
     */
    public static String createFileNameUseTime(String fileName, String suffix) {
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
        String time = SDF2.format(new Date());
        int num = random.nextInt(9000) + 1000;
        return time + num + fileSuffix + suffix;
    }

    /**
     * @param fileName 文件名
     * @return 生成文件名使用UUID
     *      UUID 是 通用唯一识别码（Universally Unique Identifier）的缩写，
     *      是一种软件建构的标准，亦为开放软件基金会组织在分布式计算环境领域的一部分。
     *      其目的，是让分布式系统中的所有元素，都能有唯一的辨识信息，而不需要通过中央控制端来做辨识信息的指定。
     *      如此一来，每个人都可以创建不与其它人冲突的UUID。在这样的情况下，就不需考虑数据库创建时的名称重复问题。
     *      目前最广泛应用的UUID，是微软公司的全局唯一标识符（GUID），而其他重要的应用，
     *      则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。
     *      另外我们也可以在e2fsprogs包中的UUID库找到实现。
     */
    public static String createFileNameUseUUID(String fileName) {
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
        return UUID.randomUUID().toString().replace("-", "").toUpperCase() + fileSuffix;
    }


    /**
     * 根据时间 + 五位随机数成字符串
     * @param prefix 前缀
     * @return
     */
    public static String createRandomStringUseTime(String prefix) {
        return prefix + "_" + SDF3.format(new Date()) + "_" + (random.nextInt(90000) + 10000);
    }

}
